package main

import (
	"flag"
	log "code.google.com/p/log4go"
	"EasyReson/global"
	"os"
	"os/signal"
	"syscall"
	"EasyReson/task"
	"EasyReson/zk_task"
	"runtime"
)
const(
	DefaultConfigPath ="config/config.json"
	DefaultLogPath = "config/log4go.xml"
)
/**
	充分利用服务器线程跑任务
 */
func init(){
	runtime.GOMAXPROCS(runtime.NumCPU()*2)
}
/**
	EasyReson 程序逻辑执行入口，与数据勾兑相关的服务
 */
func main(){
	cfg := flag.String("config", DefaultConfigPath, "configuration file")
	flag.Parse()
	log.LoadConfiguration(DefaultLogPath)
	//初始化配置信息
	global.ParseConfig(*cfg)
	//配置信息关键配置检查
	err := global.CheckConfigErr()
	global.PanicError(err,nil)

	//如果有配置Zookeeper，则表示当前的JOB需要启动分布式治理能力，则连接zk
	if ""!= global.Config().Zookeeper {
		log.Info("init zk config task ip[%s]",global.Config().Zookeeper)
		zk_task.InitZkTask()
	}
	//启动任务
	for v:=range global.Config().Tasks{
		if global.Config().Tasks[v].IsUse {
			go task.RunTask(global.Config().Tasks[v])
		}
	}
	//接收程序关闭信息
	signs := make(chan os.Signal, 1)
	signal.Notify(signs, syscall.SIGINT, syscall.SIGTERM)
	go func() {
		<-signs
		log.Info("EasyReson Exit by kill")
		//关闭所有数据连接
		task.QueueManager.CloseAll()

		os.Exit(0)
	}()
	<-signs
	//在主进程阻塞
	select {}

}